/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2025. All rights reserved.
 *
 */
import { HvigorTaskGroupType } from '@ohos/hvigor/src/base/external/task/core-task.js';
import { ApiType } from '../project/data/hap-extra-info.js';
import { TaskGroupType } from '../tasks/common/task-names.js';

/**
 * Error Code Map
 */
export namespace ECM {
  /**
   * 模型
   * 这里的unexpected是指两种模型都会执行
   * @type {string}
   */
  export type ApiTypeKey = 'unexpected' | ApiType.FA | ApiType.STAGE;
  export const ApiTypeMap: Record<ApiTypeKey, string> = {
    unexpected: '0',
    [ApiType.FA]: '1',
    [ApiType.STAGE]: '2',
  };

  export function getApiTypeEC(apiType: ECM.ApiTypeKey): string {
    return ECM.ApiTypeMap[apiType] ?? ECM.ApiTypeMap['unexpected'];
  }

  /**
   * 模块类型
   * @type {string}
   */
  export type ModuleTypeKey = 'unexpected' | 'app' | 'hap' | 'hsp' | 'har';
  export const ModuleTypeMap: Record<ModuleTypeKey, string> = {
    unexpected: '0',
    hap: '1',
    hsp: '2',
    har: '3',
    app: '4',
  };

  export function getModuleTypeEC(moduleType: ECM.ModuleTypeKey): string {
    return ECM.ModuleTypeMap[moduleType] ?? ECM.ModuleTypeMap['unexpected'];
  }

  /**
   * 功能/任务分组
   * @type {string}
   */
  export type TaskGroupKey = TaskGroupType | HvigorTaskGroupType;

  export const taskGroupMap: Record<TaskGroupKey, string> = {
    [HvigorTaskGroupType.OTHER_TASK_GROUP]: '00',
    [HvigorTaskGroupType.SYNC_TASK_GROUP]: '01',
    [HvigorTaskGroupType.HELP_TASK_GROUP]: '02',
    [TaskGroupType.ARKTS_TASK_GROUP]: '03',
    [TaskGroupType.JS_TASK_GROUP]: '04',
    [TaskGroupType.RESOURCES_TASK_GROUP]: '05',
    [TaskGroupType.PACKAGE_TASK_GROUP]: '06',
    [TaskGroupType.SIGN_TASK_GROUP]: '07',
    [TaskGroupType.VERIFICATION_TASK_GROUP]: '08',
    [TaskGroupType.GENERATE_TASK_GROUP]: '09',
    [TaskGroupType.HOOK_TASK_GROUP]: '10',
    [TaskGroupType.CONFIG_TASK_GROUP]: '11',
    [TaskGroupType.NATIVE_TASK_GROUP]: '12',
    [HvigorTaskGroupType.INIT_TASK_GROUP]: '13',
    [HvigorTaskGroupType.CUSTOMIZE_TASK_GROUP]: '14',
  };

  export function getTaskGroupEC(taskGroup: string): string {
    return ECM.taskGroupMap[taskGroup as ECM.TaskGroupKey] ?? ECM.taskGroupMap[HvigorTaskGroupType.OTHER_TASK_GROUP];
  }

  /**
   * Details Error Code Enum 具体报错的错误码
   */
  export enum DECE {
    // 未定义错误
    UNEXPECTED = '000',

    // 通用工具类
    COMMON_UTILS = '100',
    PROCESS_UTILS_HANDLE_EXCEPTION = '110',

    // schema校验
    SCHEMA_VALIDATION = '200',

    // 业务逻辑
    SERVICE_LOGIC = '300',

    // sdk工具调用
    SDK_INVOKING = '400',
    ARKTS_COMPILER = '410',
  }
}
